export default {
  state: {
    //刷新后菜单栏会消失
    //原因，state中的数据是存储在内存中的
    //解决：对state中的数据缓存，持久化处理
    menu: [],
  },
  mutations: {
    setMenu(state, val) {
      state.menu = val
      //缓存在sessionStorage中保证刷新后不会消失，实现持久化
      //注：sessionStorage只能存储字符串
      sessionStorage.setItem('menu', JSON.stringify(val))
    },
    clearMenu(state) {
      state.menu = []
      sessionStorage.removeItem('menu')
    },
    //动态添加路由，解决不同角色有不同的菜单权限，防止通过url跳转路由
    addMenu(state, router) {
      if (!sessionStorage.getItem('menu')) {
        return
      }
      const menu = JSON.parse(sessionStorage.getItem('menu'))
      state.menu = menu
      const menuArray = []
      menu.forEach((item) => {
        if (item.children) {
          item.children = item.children.map((item) => {
            item.component = () => import(`../../views/${item.url}`)
            return item
          })
          menuArray.push(...item.children)
        } else {
          item.component = () => import(`../../views/${item.url}`)
          menuArray.push(item)
        }
      })

      //路由的动态添加
      menuArray.forEach((item) => {
        //在Main下添加子路由
        router.addRoute('Main', item)
      })
      router.addRoute({
        path: '*',
        redirect: '/404',
      })
    },
  },
}
